﻿using System;
using System.Xml.Linq;

namespace CPN.PJN.Silverlight.Common.ExceptionHandling
{
    /// <summary>
    /// Cette classe représente un type de sortie d'Exception définit
    /// </summary>
    public abstract class ExceptionHandler
    {
        #region Name Property

        /// <summary>
        /// Nom de la gestion d'exception
        /// </summary>
        public string Name { get; set; } 

        #endregion
        
        #region Formatter Property

        /// <summary>
        /// Formatage de l'Exception pour la sortie
        /// </summary>
        public ExceptionFormatter Formatter { get; set; } 

        #endregion

        #region Configure abstract Method
        
        /// <summary>
        /// Configuration du gestionnaire
        /// </summary>
        /// <param name="configurationElement">Element de configuration</param>
        public abstract void Configure(XElement configurationElement); 

        #endregion
        
        #region HandleException abstract Method

        /// <summary>
        /// Permet d'exécuter la gestion de l'exception
        /// </summary>
        /// <param name="exceptionToHandle">Exception récupérée</param>
        /// <param name="data">Données de l'exception</param>
        public abstract void HandleException(Exception exceptionToHandle, params object[] data); 

        #endregion
    }
}
